'\" t
.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\" References consulted:
.\"     Linux libc source code
.\"     Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
.\"     386BSD man pages
.\" Modified Sat Jul 24 18:55:27 1993 by Rik Faith (faith@cs.unc.edu)
.TH memcmp 3 2024-05-02 "Linux man-pages 6.9.1"
.SH NAME
memcmp \- compare memory areas
.SH LIBRARY
Standard C library
.RI ( libc ", " \-lc )
.SH SYNOPSIS
.nf
.B #include <string.h>
.P
.BI "int memcmp(const void " s1 [. n "], const void " s2 [. n "], size_t " n );
.fi
.SH DESCRIPTION
The
.BR memcmp ()
function compares the first \fIn\fP bytes (each interpreted as
.IR "unsigned char" )
of the memory areas \fIs1\fP and \fIs2\fP.
.SH RETURN VALUE
The
.BR memcmp ()
function returns an integer less than, equal to, or
greater than zero if the first \fIn\fP bytes of \fIs1\fP is found,
respectively, to be less than, to match, or be greater than the first
\fIn\fP bytes of \fIs2\fP.
.P
For a nonzero return value, the sign is determined by the sign of
the difference between the first pair of bytes (interpreted as
.IR "unsigned char" )
that differ in
.I s1
and
.IR s2 .
.P
If
.I n
is zero, the return value is zero.
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.TS
allbox;
lbx lb lb
l l l.
Interface	Attribute	Value
T{
.na
.nh
.BR memcmp ()
T}	Thread safety	MT-Safe
.TE
.SH STANDARDS
C11, POSIX.1-2008.
.SH HISTORY
POSIX.1-2001, C89, SVr4, 4.3BSD.
.SH CAVEATS
Do not use
.BR memcmp ()
to compare confidential data,
such as cryptographic secrets,
because the CPU time required for the comparison
depends on the contents of the addresses compared,
this function is subject to timing-based side-channel attacks.
In such cases,
a function that performs comparisons in deterministic time,
depending only on
.I n
(the quantity of bytes compared)
is required.
Some operating systems provide such a function (e.g., NetBSD's
.BR consttime_memequal ()),
but no such function is specified in POSIX.
On Linux, you may need to implement such a function yourself.
.SH SEE ALSO
.BR bstring (3),
.BR strcasecmp (3),
.BR strcmp (3),
.BR strcoll (3),
.BR strncasecmp (3),
.BR strncmp (3),
.BR wmemcmp (3)
